#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''

Version 4.2 Recart.

Esta versión resuelve:
 - El problema del vendedor viajero: TSP
 - El problema de la mochila: KP

Articulo relacionado al TSP: Busqueda de rutas optimas mediante la deteccion de curvatura espacial.
Articulo relacionado a KP:

@author: Mauricio Cleveland.

Algoritmo de curvatura espacial (ACE) 2012.

'''

from pyaceOperations.files import *
from pyaceOperations.entradaUsuario import *
from pyaceOptimization.coreace import *
from pyaceOptimization.coreacemochila import *

import sys

#Internacionalizacion
import gettext
gettext.textdomain("pyace")
gettext.bindtextdomain("pyace", "/usr/share/locale")
_ = gettext.gettext
#Fin Internacionalizacion

class ACE():
    
    def iniciarRecolexion(self):
        
        datosUsuario = DatosUsuarioClass(sys.argv[1:])
        self.DatosEntrada = datosUsuario.GetDatos()
        self.tipo = ''
                
    def crearMatriz(self):
        
        print _('Building matrix...')
        ClaseArchivo = FilesClass(self.DatosEntrada['archivo'])
        
        self.tipo = ClaseArchivo.GetTipoProblema()
        
        if self.tipo == 'tsp':
            self.matrizDeDistancia = ClaseArchivo.GetMatrizDistancia()
            
        elif self.tipo == 'kp':
            self.listaElementos = ClaseArchivo.GetListaElementos()
            self.maximaCapacidad = ClaseArchivo.GetMaximaCapacidad()
        

    def iniciarAlgoritmo(self):
        if self.tipo == 'tsp':
            Instancia = BusquedaDeGravedad(0, self.DatosEntrada['universos'], self.DatosEntrada['particulas'], 'no', 50, self.matrizDeDistancia)
            self.resultado = Instancia.RunUniversos()
            print _('\nDistance: '), self.resultado[0]
            
        if self.tipo == 'kp':
            Instancia = BusquedaDeItems(0, self.DatosEntrada['universos'], self.DatosEntrada['particulas'], 'no', self.listaElementos, self.maximaCapacidad)
            self.resultado = Instancia.RunUniversos()
            
            print ''
            print _('Profit: '), self.resultado[2]
            print _('Weight: '), self.resultado[0]
            print ''
        
    #    #Ejecucion
    #    Instancia.deteccion_de_curvatura(archivo)

if __name__ == '__main__':

    try:
        Algoritmo = ACE()
        Algoritmo.iniciarRecolexion()
        Algoritmo.crearMatriz()
        Algoritmo.iniciarAlgoritmo()
        
        #print _('Path:'), Algoritmo.resultado[1]
        
        
    except Exception,e:
        print _('Use: pyace [file] [universes] [particles]')
        print _('Try "man pyace" for more infrmation.')
        print _('\nThe error was: '), e